package main;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

/**
 * Parst eine SimpleText Datei oder einen SimpleText String und gibt diesen ueber den Contenthandler in eine Textpane aus.
 *
 * @author Patrick Bauer
 */
public class SimpleTextParser {
    /**
     * Zu benutzender ContentHandler.
     */
    private SimpleTextContentHandler handler;

    /**
     * Dateiname der zu parsenden Datei.
     */
    private String fileName;

    /**
     * Setzt den Dateinamen
     *
     * @param fileName der Dateiname
     */
    public SimpleTextParser(String fileName) {
        this.fileName = fileName;
    }

    /**
     * Initialisiert ein Objekt ohne die Angabe eines Dateinamens.
     */
    public SimpleTextParser() {
        this("");
    }

    /**
     * Setzt den zu benutzenden ContentHandler.
     * 
     * @param handler der ContentHandler
     */
    public void setContentHandler(SimpleTextContentHandler handler) {
        this.handler = handler;
    }

    /**
     * Liest die XML Datei ein und uebergibt diese an den Contenthandler.
     */
    public void parse() throws IOException, SAXException {
        //load xml from file
        BufferedReader reader = new BufferedReader(new FileReader(this.fileName));
        InputSource inputSource = new InputSource(reader);

        //instance xmlreader
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setFeature("http://xml.org/sax/features/validation", true);
        xmlReader.setContentHandler(this.handler);
        xmlReader.parse(inputSource);
    }

    /**
     * Parst einen String und uebergibt diesen an den Contenthandler.
     *
     * @param xmlString
     */
    public void parse(String xmlString) throws SAXException, IOException {
        //load xml from string
        StringReader reader = new StringReader(xmlString);
        InputSource inputSource = new InputSource(reader);
        
        //instance xmlreader
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setFeature("http://xml.org/sax/features/validation", true);
        xmlReader.setContentHandler(this.handler);
        xmlReader.parse(inputSource);
    }
    
}
